package br.com.gerenteweb.managedBean;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.gerenteweb.beans.UnidadeDeMedida;
import br.com.gerenteweb.daos.UnidadeDeMedidaDao;
import br.com.gerenteweb.interfaces.ManageBeansInterface;

@ManagedBean(name = "unidadeDeMedidaBean")
@SessionScoped
public class UnidadeDeMedidaBean implements Serializable, ManageBeansInterface {

	private static final long serialVersionUID = 1L;
	private UnidadeDeMedida unidadeDeMedida = new UnidadeDeMedida();
	private UnidadeDeMedidaDao unidadeDeMedidaDao = new UnidadeDeMedidaDao();
	private List<UnidadeDeMedida> medidas;

	public UnidadeDeMedidaBean() {
	}

	@Override
	public String adicionar() {
		try {
			unidadeDeMedidaDao.addUnidadeDeMedida(this.unidadeDeMedida);
			limpar();
			return "lista-de-medidas";
		} catch (Exception e) {
			e.printStackTrace();
			return "lista-de-medidas";
		}
	}

	@Override
	public String remover() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String idMedida = params.get("idMedida");
		try {
			unidadeDeMedida = unidadeDeMedidaDao.getPorID(Integer
					.parseInt(idMedida));
			unidadeDeMedidaDao.removeUnidadeDeMedida(unidadeDeMedida);
			limpar();
			return "lista-de-medidas";
		} catch (Exception e) {
			e.printStackTrace();
			return "lista-de-medidas";
		}

	}

	@Override
	public String carregar() {
		try {
			Map<String, String> params = FacesContext.getCurrentInstance()
					.getExternalContext().getRequestParameterMap();
			String idMedida = params.get("idMedida");
			this.unidadeDeMedida = unidadeDeMedidaDao.getPorID(Integer
					.parseInt(idMedida));
			return "carregar-medida";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "lista-de-medidas";
	}

	@Override
	public void atualizar() {
		try {
			unidadeDeMedidaDao.updateMedida(unidadeDeMedida);
			limpar();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void limpar() {
		this.unidadeDeMedida = new UnidadeDeMedida();
		this.medidas = null;
		this.unidadeDeMedidaDao = new UnidadeDeMedidaDao();
	}

	public UnidadeDeMedida getUnidadeDeMedida() {
		return unidadeDeMedida;
	}

	public void setUnidadeDeMedida(UnidadeDeMedida unidadeDeMedida) {
		this.unidadeDeMedida = unidadeDeMedida;
	}

	public UnidadeDeMedidaDao getUnidadeDeMedidaDao() {
		return unidadeDeMedidaDao;
	}

	public void setUnidadeDeMedidaDao(UnidadeDeMedidaDao unidadeDeMedidaDao) {
		this.unidadeDeMedidaDao = unidadeDeMedidaDao;
	}

	public List<UnidadeDeMedida> getMedidas() {
		listar();
		return medidas;
	}

	public void setMedidas(List<UnidadeDeMedida> medidas) {
		this.medidas = medidas;
	}

	@Override
	public void listar() {
		medidas = unidadeDeMedidaDao.getMedidas();
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((medidas == null) ? 0 : medidas.hashCode());
		result = prime * result
				+ ((unidadeDeMedida == null) ? 0 : unidadeDeMedida.hashCode());
		result = prime
				* result
				+ ((unidadeDeMedidaDao == null) ? 0 : unidadeDeMedidaDao
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		UnidadeDeMedidaBean other = (UnidadeDeMedidaBean) obj;
		if (medidas == null) {
			if (other.medidas != null)
				return false;
		} else if (!medidas.equals(other.medidas))
			return false;
		if (unidadeDeMedida == null) {
			if (other.unidadeDeMedida != null)
				return false;
		} else if (!unidadeDeMedida.equals(other.unidadeDeMedida))
			return false;
		if (unidadeDeMedidaDao == null) {
			if (other.unidadeDeMedidaDao != null)
				return false;
		} else if (!unidadeDeMedidaDao.equals(other.unidadeDeMedidaDao))
			return false;
		return true;
	}

}
